

# define LREG lw
# define SREG sw
# define REGBYTES 4

    .section ".text.init"
    .global _start
# .set noat

_start:
    ori     x1,x0,0
    ori     x2,x0,0
    ori     x3,x0,0
    ori     x4,x0,0
    ori     x5,x0,0
    ori     x6,x0,0
    ori     x7,x0,0
    ori     x8,x0,0
    ori     x9,x0,0
    ori     x10,x0,0
    ori     x11,x0,0
    ori     x12,x0,0
    ori     x13,x0,0
    ori     x14,x0,0
    ori     x15,x0,0
    ori     x16,x0,0 
    ori     x17,x0,0
    ori     x18,x0,0
    ori     x19,x0,0
    ori     x20,x0,0
    ori     x21,x0,0
    ori     x22,x0,0
    ori     x23,x0,0
    ori     x24,x0,0
    ori     x25,x0,0
    ori     x26,x0,0
    ori     x27,x0,0
    ori     x28,x0,0
    ori     x29,x0,0
    ori     x30,x0,0
    ori     x31,x0,0


_init:
    la      t0,_exception_handler    
    csrw    mtvec,t0
.option push
.option norelax
    la      gp, __global_pointer$
.option pop
    la      tp, _end + 63
    and     tp, tp, -64

    li      a1, 1
    li      a0, 1
    sll     a2, a0, 16
    add     tp, tp, a2
    add     sp, a0, 1
    sll     sp, sp, 16
    add     sp, sp, tp
    j       _main

  .align 2
_exception_handler:
    ori     x1,x0,6
    ori     x2,x0,6
    ori     x3,x0,6
    ori     x4,x0,6
    ori     x5,x0,6
    ori     x6,x0,6
    ori     x7,x0,6
    ori     x8,x0,6
    ori     x9,x0,6
    mret    

_main:
    add     a0,tp,sp
    addi    a0,a0,2000
    lw      x2,0(a0)
    ori     a0,x0,2
    ori     a1,x0,3
    ori     a2,x0,4
    ori     a3,x0,5
    j       _main  # jump to target
    